package com.gnerv.pabu.basic.core.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gnerv.pabu.basic.core.dto.OrgDTO;
import com.gnerv.pabu.basic.core.dto.OrgSaveDTO;
import com.gnerv.pabu.basic.core.dto.OrgSearchDTO;
import com.gnerv.pabu.basic.core.dto.OrgTreeDTO;

import java.util.List;

/**
 * 基础平台-组织机构 service 接口
 *
 * @author zhang
 * @date 2019/11/30
 **/
public interface IOrgService {

    /**
     * 组织机构 保存
     *
     * @param orgSaveDTO
     * @return
     */
    boolean saveOrg(OrgSaveDTO orgSaveDTO);

    /**
     * 组织机构 更新
     *
     * @param orgSaveDTO
     * @return
     */
    boolean updateOrg(OrgSaveDTO orgSaveDTO);

    /**
     * 组织机构 添加
     *
     * @param orgSaveDTO
     * @return
     */
    boolean createOrg(OrgSaveDTO orgSaveDTO);

    /**
     * 组织机构删除
     *
     * @param orgId
     * @return
     */
    boolean deleteOrg(String orgId);

    /**
     * 组织机构查询
     *
     * @param orgId
     * @return
     */
    OrgDTO selectOrg(String orgId);

    /**
     * 查询组织机构树
     *
     * @param parentId
     * @return
     */
    List<OrgTreeDTO> listOrgTree(String parentId);

    /**
     * 组织机构 分页条件 查询
     *
     * @param current
     * @param size
     * @param orgSearchDTO
     * @return
     */
    Page<OrgDTO> listOrg(Integer current, Integer size, OrgSearchDTO orgSearchDTO);

    /**
     * 判断机构是否存在下级机构
     *
     * @param orgId
     * @return
     */
    boolean hasChildren(String orgId);

    /**
     * 绑定 组织 用户
     *
     * @param orgId
     * @param userIds
     * @return
     */
    boolean bindOrgUser(String orgId, List<String> userIds);

    /**
     * 绑定 组织 用户
     *
     * @param orgId
     * @param userId
     * @return
     */
    boolean bindOrgUser(String orgId, String userId);

    /**
     * 组织 解绑 用户
     *
     * @param orgId
     * @return
     */
    boolean unBindOrgUser(String orgId);

    /**
     * 用户 解绑 组织
     *
     * @param userId
     * @return
     */
    boolean unBindUserOrg(String userId);

    boolean updateOrgStatus(String orgId, Integer status);
}
